package com.knife.common.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StopWatch;
import org.springframework.util.StringUtils;

/**
 * @author qiang.zhang Date 2022-07-18 23:26
 * 描述：stop watch 工具类 该类中 StopWatch 使用的是 spring 的 {@link org.springframework.util.StopWatch} common-lang3 提供了一个功能更丰富的 {@link org.apache.commons.lang3.time.StopWatch}
 * 作用：
 */
public class StopWatchUtil {

    /**
     * 日志记录对象
     */
    private static final Logger logger = LoggerFactory.getLogger(StopWatchUtil.class);

    private StopWatchUtil() {
    }
    /**
     * @author qiang.zhang 2022/7/18 23:41
     * @param
     * @return
     * 描述：创建sw 同时，并启动
     * 备注：
     */
    public static StopWatch createStarted(String taskName) {
        StopWatch sw = new StopWatch();
        if (!StringUtils.hasText(taskName)) {
            taskName = "STOP_WATCH_TASK";
        }
        sw.start(taskName);
        return sw;
    }

    /**
     * @author qiang.zhang 2022/7/18 23:38
     * @param
     * @return
     * 描述：停止并且记录任务执行时间，要求一定要有正在计时的任务
     * 备注：
     */
    public static void stopAndTiming(StopWatch sw) {
        if (sw == null) {
            logger.warn("stop watch is null,please check.");
            return;
        }
        if (!sw.isRunning()) {
            logger.warn("not is runing task");
            return;
        }
        sw.stop();
        logger.info("--------------------------------------------------------------------------------");
        logger.info("计时任务名称: {}, 程序执行耗时: {}/ms",sw.getLastTaskName(), sw.getLastTaskTimeMillis());
        logger.info("--------------------------------------------------------------------------------");
    }
}
